package familytree.struts.actions;


import familytree.negocio.INodoProcessor;
import familytree.negocio.IUsuarioProcessor;
import familytree.negocio.bo.NodoBO;
import familytree.negocio.bo.UsuarioBO;
import familytree.persistencia.pojos.Nodo;
import familytree.persistencia.pojos.Usuario;
import familytree.struts.forms.UsuarioForm;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.hibernate.Session;

/**
 *
 * @author Antonio
 */
public class NuevoUsuarioInvitadoAction extends Action {

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception 
    {
        Calendar calendario;
        Integer dia,mes,anyo;        
        
        
        
        //Recuperamos el idUsuario y el correo del nuevo usuario invitado
        String idNodo = (String)req.getSession().getAttribute("id");
        String correoUsuario = (String)req.getSession().getAttribute("correo");
        
        //Recuperamos el form y el usuario
        UsuarioForm usuarioForm = (UsuarioForm)form;
        Usuario usuario = usuarioForm.getUsuario();
        usuario.setCorreo(correoUsuario);
        
        //Recuperamos el nodo por su id
        INodoProcessor nodobd = new NodoBO();
        Nodo nodo = nodobd.getNodoPorIdNodo(idNodo);
        
       
       IUsuarioProcessor usuarioBd = new UsuarioBO();
        
        //Comprobamos que no exista ya un usuario con su nombre de usuario
        //Si existe fallo y vuelve a la página
        if(usuarioBd.existeUsuarioConCorreo(usuario.getCorreo(),nodo.getArbol()))
        {            
            req.setAttribute("bandera", true);
            return mapping.findForward("fallo");
        }
        else //si no, añadimos el usuario
        {       
            
            req.setAttribute("bandera", false);
            dia = new Integer(usuarioForm.getDia());
            mes = new Integer(usuarioForm.getMes());
            anyo = new Integer(usuarioForm.getAnyo());
            calendario = new GregorianCalendar(anyo, mes, dia);
            usuario.setFechaNacimiento(calendario);
            //Refrescamos los atributos del usuario
            usuario.setCorreo(correoUsuario);
            usuario = usuarioBd.insert(usuario,nodo);
            INodoProcessor nodoBD = new NodoBO();
                        
            //Actualizamos el nodo 
            
            //Recuperamos el nodo
            nodo = nodoBD.getNodoPorIdNodo(idNodo); 
            req.getSession().setAttribute("usuarioActual", usuario);
            req.getSession().setAttribute("nodoActual",nodo);
            return mapping.findForward("ok");
        }
     }

    
}

